package com.fengwk.support.redis;

import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * redis工具,需在spring中配置bean
 */
public class RedisDatabase {
	
	// 连接池
	private final JedisPool jedisPool;
	
	public RedisDatabase(JedisPool jedisPool) {
		this.jedisPool = jedisPool;
	}
	
	/**
	 * 从连接池获取redis连接
	 * 
	 * @return
	 */
	public Jedis get() {
		return jedisPool.getResource();
	}

	/**
	 * 回收redis连接
	 * 
	 * @param jedis
	 */
	public void recycle(Jedis jedis) {
		if (jedis != null) {
		    jedis.close();
		}
	}

	/**
	 * 保存字符串数据
	 * 
	 * @param key
	 * @param value
	 * @param expire 过期时间/秒 
	 */
	public void set(String key, String value, int expire) {
		Jedis jedis = get();
		jedis.set(key, value);
		if(expire >= 0) {
			jedis.expire(key, expire);
		}
		recycle(jedis);
	}
	
	/**
	 * 保存byte[]类型数据
	 * 
	 * @param key
	 * @param value
	 * @param expire 过期时间/秒 
	 */
	public void set(byte[] key, byte[] value, int expire) {
		Jedis jedis = get();
		jedis.set(key, value);
		if(expire >= 0) {
			jedis.expire(key, expire);
		}
		recycle(jedis);
	}

	/**
	 * 获取字符串类型的数据
	 * 
	 * @param key
	 * @return
	 */
	public String get(String key) {
		Jedis jedis = get();
		String result = jedis.get(key);
		recycle(jedis);
		return result;
	}
	
	/**
	 * 获取byte[]类型的数据
	 * 
	 * @param key
	 * @return
	 */
	public byte[] get(byte[] key) {
		Jedis jedis = get();
		byte[] result = jedis.get(key);
		recycle(jedis);
		return result;
	}

	/**
	 * 删除字符串数据
	 * 
	 * @param key
	 */
	public void del(String key) {
		Jedis jedis = get();
		jedis.del(key);
		recycle(jedis);
	}

	/**
	 * 删除byte[]数据
	 * 
	 * @param key
	 */
	public void del(byte[] key) {
		Jedis jedis = get();
		jedis.del(key);
		recycle(jedis);
	}

	/**
	 * 更新过期时间
	 * 
	 * @param key
	 * @param expire
	 */
	public void expire(String key, int expire) {
		Jedis jedis = get();
		if(expire >= 0) {
			jedis.expire(key, expire);
		}
		recycle(jedis);
	}
	
	/**
	 * 更新过期时间
	 * 
	 * @param key
	 * @param expire
	 */
	public void expire(byte[] key, int expire) {
		Jedis jedis = get();
		if(expire >= 0) {
			jedis.expire(key, expire);
		}
		recycle(jedis);
	}

	/**
	 * 获取所有keys
	 * 
	 * @param pattern
	 * @return
	 */
	public Set<String> getAllKeys(String pattern) {
		Jedis jedis = get();
		Set<String> keys = jedis.keys(pattern);
		recycle(jedis);
		return keys;
	}
	
	/**
	 * 移除所有数据
	 */
	public void flushAll() {
		Jedis jedis = get();
		jedis.flushAll();
		recycle(jedis);
	}
	
}